/*
 * @Description:
 * @Author: czx
 * @Date: 2025-05-15 16:21:18
 * @LastEditTime: 2025-06-06 10:55:27
 * @LastEditors: czx
 */
#ifndef __CAM_PROTOCOL__H__
#define __CAM_PROTOCOL__H__


enum CamProtocol
{
    CAM_PROTOCOL_UNKNOWN = 0,
    CAM_PROTOCOL_TAKEPHOTO = 0x300,     //拍照

    CAM_PROTOCOL_MAX = 0xFFFF

};

typedef void (*RespondHandleFunc_t)(
    ///< The event type.
    const char* message,
    ///< The message to be handled.
    void* contextPtr
    ///< The context pointer.
);
typedef int (*SendMessageFunc_t)(
    void* contextPtr
    ///< The context pointer.
);

//发送消息接口
//处理回调函数

typedef struct
{
    CamProtocol event_type; //事件类型
    SendMessageFunc_t send; //发送消息接口
    RespondHandleFunc_t handle;
} CamProtocolEvent;

typedef struct
{
    /*
    拍照模式
    Byte1
    0x00：默认拍照 （与照⽚设置绑
    定，按照拍照指令存图）
    0x01：红外拍照
    0x02：⼴⻆拍照
    0x03：红外+⼴⻆拍照
    0x04：变焦拍照
    0x05：红外+变焦拍照
    0x06：变焦+⼴⻆拍照
    0x07：红外+变焦+⼴⻆拍照 （航迹
    默认拍照指令）
    （位开关：bit0：红外；bit1：⼴
    ⻆；bit2：变焦）
    */
    unsigned char mode;
    /*相机拍照指令Byte2
    0x00：单拍/开始拍照
    0x01：停⽌拍照（仅连拍模式有
    效）
    */
    unsigned char command;
    /*
        ⽂件夹名，不包含’\0’,总共20个字节，该字节数组，组成⼀个字符串（字符串A）,该字符串为NULL或者””的时候，不使⽤该字段，放到保存图⽚⽂件根⽬录下；该字符串不为空的情况，使⽤该字段，保
    存图⽚的根⽬录有该⽂件夹则⽆需创建，⽆该⽂件夹，则需要创建该⽂件夹。
    */
    char dirName[20];
    /*
        图⽚名称，不包含’\0’,总共32个字节，该字节数组，组成⼀个字符串，该字符串为NULL或者””的时候，使⽤默认的名称规则命名，该字符串不为空，使⽤该字符串作为图⽚名称
    */
    char photoName[32];
} TakePhotoContext;

void HandleEvent(CamProtocol & event, const char* message, void* contextPtr);
int SendCommandTakePhoto(void* contextPtr);
int SendCommandSetCameraMode(void* contextPtr);


#endif  //!__CAM_PROTOCOL__H__